﻿#define _CRT_SECURE_NO_WARNINGS 1

#include <stdio.h>

//int main()
//{
//	int arr[3][5];
//	double data[5][8];
//
//	return 0;
//}

//int main()
//{
//	int arr1[3][5] = {1,2,3};//不完全初始化
//	int arr2[3][5] = { 1,2,3,4,5,6 };//不完全初始化
//	int arr4[3][5] = { 0 };
//	int arr3[3][5] = { 1,2,3,4,5,2,3,4,5,6,3,4,5,6,7 };//完全初始化
//	int arr5[][5] = { {1,2},{3,4},{5,6} };//不完全初始化
//	//如果二维数组初始化了，行是可以省略的，但是列不能省略
//
//	//int arr[] = { 1,2,3,4,5 };
//
//	return 0;
//}

//int main()
//{
//	int arr[3][5] = { 1,2,3,4,5, 2,3,4,5,6, 3,4,5,6,7 };
//	printf("%d\n", arr[2][4]);
//	//1 2 3 4 5
//	//2 3 4 5 6
//	//3 4 5 6 7
//
//	return 0;
//}

//int main()
//{
//	int arr[3][5] = { 1,2,3,4,5, 2,3,4,5,6, 3,4,5,6,7 };
//	int i = 0;
//	//输入数据
//	for (i = 0; i < 3; i++)
//	{
//		int j = 0;
//		for (j = 0; j < 5; j++)
//		{
//			scanf("%d", &arr[i][j]);
//		}
//	}
//	//输出数据的内容
//	for (i = 0; i < 3; i++)//每次进入循环，打印一行的数据
//	{
//		int j = 0;
//		for (j = 0; j < 5; j++)
//		{
//			printf("%d ", arr[i][j]);
//		}
//		printf("\n");
//	}
//
//	return 0;
//}

//int main()
//{
//	int arr[3][5] = {0};
//	for (int i = 0; i < 3; i++)
//	{
//		for (int j = 0; j < 5; j++)
//		{
//			printf("&arr[%d][%d] = %p\n", i, j, &arr[i][j]);
//		}
//	}
//
//	return 0;
//}

//int main()
//{
//	int arr1[10] = { 0 };
//	int arr2[3][5] = { 0 };
//
//	int n = 10;
//	int arr[n];
//	return 0;
//}
//vs2022默认使用的msvc的编译器是不支持C99中的变长数组的
//vs上有办法支持C99的变长数组吗？
//在vs上也可以安装clang（苹果）编译组件

/*
	变长数组
	注意：变长数组不能初始化！！！
*/

//int main()
//{
//	int n = 10;
//	int arr[n];
//
//	return 0;
//}

//int main()
//{
//	int n = 10;
//	int arr[n];
//
//	int i = 0;
//	for (i = 0; i < 10; i++)
//	{
//		arr[i] = i + 1;
//	}
//	for (i = 0; i < 10; i++)
//	{
//		printf("arr[%d]=%d   ",i,i+1 );
//	}
//	
//	return 0;
//}

//int main()
//{
//	int n = 0;
//	scanf("%d", &n);//20
//	int arr[n];//变长数组是不能初始化的 
//	
//	int i = 0;
//	for(i = 0; i < n; i++)
//	{
//		arr[i] = i;
//	}
//	for(i = 0; i < n; i++)
//	{
//		printf("%d ", arr[i]);
//	}
//	
//	return 0;
//}

/*
	练习1：多个字符从两端移动，向中间汇聚
	编写代码，演⽰多个字符从两端移动，向中间汇聚	
*/

//#include <stdio.h>
//
//int main()
//{
//	char arr1[] = "welcome to bite!!!";
//	char arr2[] = "******************";
//	int sz = sizeof(arr1) / sizeof(arr1[0]);
//	int left = 0;
//	int right = sz - 2;
//	
//	while (left <= right)
//	{
//		printf("%s\n",arr2);
//		arr2[left] = arr1[left];
//		arr2[right] = arr1[right];
//		left++;
//		right--;
//	}
//	printf("%s\n", arr2);
//
//	return 0;

//#include <stdio.h>
//#include <windows.h>
//
//int main()
//{
//	char arr1[] = "welcome to bite!!!";
//	char arr2[] = "******************";
//	int sz = sizeof(arr1) / sizeof(arr1[0]);
//	int left = 0;
//	int right = sz - 2;
//
//	while (left <= right)
//	{
//		printf("%s\n", arr2);
//		Sleep(2000);
//		system("cls");
//		arr2[left] = arr1[left];
//		arr2[right] = arr1[right];
//		left++;
//		right--;
//	}
//	printf("%s\n", arr2);
//
//	return 0;
//}

//#include <stdio.h>
//#include <windows.h>
//
//int main()
//{
//	char arr1[] = "春风得意马蹄疾，一日看尽长安花！";
//	char arr2[] = "********************************";
//	/*
//		中文的标点符号也算两个字节
//	*/
//	int sz = sizeof(arr1) / sizeof(arr1[0]);
//	int left = 0;
//	int right = sz - 2;
//
//	while (left <= right)
//	{
//		printf("%s\n", arr2);
//		Sleep(2000);
//		system("cls");
//		arr2[left] = arr1[left];
//		arr2[left+1] = arr1[left+1];
//		arr2[right] = arr1[right];
//		arr2[right-1] = arr1[right-1];
//		left+=2;
//		right-=2;
//	}
//	printf("%s\n", arr2);
//
//	return 0;
//}

//#include <string.h>
//#include <windows.h>
////strlen 是求字符串长度的，统计的是字符串中\0之前的字符个数
//int main()
//{
//	//char str[] = "abc";//3
//	////            012
//	char arr1[] = "welcome to bit!!!!!!!";
//	char arr2[] = "#####################";
//	int left = 0;
//	int right = strlen(arr1) - 1;
//
//	while (left <= right)
//	{
//		arr2[left] = arr1[left];//w
//		arr2[right] = arr1[right];//!
//		printf("%s\n", arr2);
//		Sleep(1000);//windows提供的函数-单位是毫秒，windows.h
//		system("cls");//清理屏幕
//		left++;
//		right--;
//	}
//
//	printf("%s\n", arr2);
//
//	return 0;
//}


//#include <string.h>
//#include <windows.h>
////strlen 是求字符串长度的，统计的是字符串中\0之前的字符个数
//int main()
//{
//	//char str[] = "abc";//3
//	////            012
//	//char str[] = "abc";
//	//[a b c \0]
//	// 0 1 2
//	//sizeof(str)/sizeof(str[0])-->4
//
//	char arr1[] = "welcome to bit!!!!!!!";
//	char arr2[] = "#####################";
//	int left = 0;
//	int right = sizeof(arr1)/sizeof(arr1[0])-2;
//
//	while (left <= right)
//	{
//		arr2[left] = arr1[left];//w
//		arr2[right] = arr1[right];//!
//		printf("%s\n", arr2);
//		Sleep(1000);//windows提供的函数-单位是毫秒，windows.h
//		system("cls");//清理屏幕
//		left++;
//		right--;
//	}
//
//	printf("%s\n", arr2);
//
//	return 0;
//}

//#include <stdio.h>
//#include <string.h>
//
//int main()
//{
//	char arr[] = "abc";
//	int sz = sizeof(arr) / sizeof(arr[0]);
//	printf("sz=%d\n", sz);//4
//	// sizeof计算的是类型和表达式类型的字节大小 
//
//	int st = strlen(arr);
//	printf("st=%d\n", st);//3
//	// strlen计算的是在字符串\0之前的字符数
//
//	return 0;
//}

/*
	二分查找（折半查找）
*/

//int main()
//{
//	int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
//	int k = 17;
//	int sz = sizeof(arr) / sizeof(arr[0]);
//	int left = 0;
//	int right = sz - 1;
//	int flag = 1;
//	while (left <= right)
//	{
//		int mid = (left + right) / 2;
//		if (arr[mid] < k)
//		{
//			left = mid + 1;
//		}
//		else if (arr[mid] > k)
//		{
//			right = mid - 1;
//		}
//		else
//		{
//			printf("找到了！这个数的下标就是%d\n", mid);
//			flag = 0;
//			break;
//		}
//	}
//	if (flag)
//	{
//		printf("找不到！\n");
//	}
//	return 0;
//}

//int main()
//{
//	int arr[] = { 1,2,3,4,5,6,7,8,9,10 };//升序的数组
//	//            0 1 2 3 4 5 6 7 8 9 
//	int k = 17;
//	//在arr中查找7
//	//依次遍历数组
//	int i = 0;
//	int sz = sizeof(arr) / sizeof(arr[0]);
//	int flag = 0;//表示没找到
//	for (i = 0; i < sz; i++)
//	{
//		if (k == arr[i])
//		{
//			printf("找到了，下标是:%d\n", i);
//			flag = 1;//找到了
//			break;
//		}
//	}
//	if (flag == 0)
//		printf("找不到\n");
//
//	return 0;
//}

//#include <stdbool.h>
//
//int main()
//{
//	int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
//	int k = 17;
//	int sz = sizeof(arr) / sizeof(arr[0]);
//	int left = 0;
//	int right = sz - 1;
//	bool flag = false;
//	while (left <= right)
//	{
//		int mid = (left + right) / 2;
//		if (arr[mid] < k)
//		{
//			left = mid + 1;
//		}
//		else if (arr[mid] > k)
//		{
//			right = mid - 1;
//		}
//		else
//		{
//			printf("找到了！这个数的下标就是%d\n", mid);
//			flag = true;
//			break;
//		}
//	}
//	if (flag == false)
//	{
//		printf("找不到！\n");
//	}
//	return 0;
//}

//int mid = (left + right) / 2;
//这样的方式求平局值的，有问题？
/*
	当left和right数据都很大时，可能会导致数据溢出
*/

//int main()
//{
//	int left = 3;
//	int right = 7;
//	//int mid = (left + right) / 2;
//	//int mid = left/2 + right/2;//  这种方法也不可取
//	//         1        3
//	int mid = left + (right - left) / 2;
//	printf("%d\n", mid);
//
//	return 0;
//}

//int main()
//{
//	int left = 7;
//	int right = 3;
//	//int mid = (left + right) / 2;
//	//int mid = left/2 + right/2;//  这种方法也不可取
//	//         1        3
//	int mid = left + (right - left) / 2;
//	printf("%d\n", mid);
//
//	return 0;
//}

#include <math.h>
int main()
{
	printf("%lf\n", sqrt(16.00));

	return 0;
}